#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include "Fourmilliere.h"


using namespace std;


Fourmilliere :: Fourmilliere()
{
}
void Fourmilliere :: Init()
{
	NB_Reines = 0;
	NB_Ouvrieres = 0;
	NB_Couveuses = 0;
	NB_Batisseuses = 0;	
	NB_Oeufs = 0;
	Nourriture = 20;
	PV = 20;
	NB_Jours_Ecoules = 0;
	NB_Jours_Famine = 0;

	srand(time(NULL));
}

void Fourmilliere :: DisplayState()
{
	system("clear");

	cout << "Jour : " << NB_Jours_Ecoules << endl << endl;
	cout << "Reines : " << NB_Reines << endl;
	cout << "Ouvriere : " << NB_Ouvrieres << endl;
	cout << "Couveuse : " << NB_Couveuses << endl;
	cout << "Batisseuse : " << NB_Batisseuses << endl;
	cout << "Oeufs : " << NB_Oeufs << endl;
	cout << endl;
	cout << "Nourriture disponible : " << Nourriture << endl;
	cout << "Taille de la colonie : " << PV << endl << endl;
	cout << "Population totale : " << NB_Reines + NB_Ouvrieres + NB_Couveuses + NB_Batisseuses<< endl;

	if(NB_Jours_Famine > 0)
		cout << endl << "Jours de famine : " << NB_Jours_Famine << endl;
}
void Fourmilliere :: NextDay()
{
	NB_Jours_Ecoules ++;

	if(Nourriture <= 0)
		NB_Jours_Famine++;
	else
		NB_Jours_Famine = 0;

	if(PV > 0)
		PV -= (NB_Reines + NB_Ouvrieres + NB_Couveuses + NB_Batisseuses) / (3 + rand()%2);

	if(PV < 0) PV = 0;
}

int Fourmilliere :: NB_Oeufs_Max_A_Pondre()
{
	return NB_Couveuses * OEUFS_PAR_COUVEUSE - NB_Oeufs;
}

// Définition des Accesseurs
int Fourmilliere :: GetNourriture()
{
	return Nourriture;
}
void Fourmilliere :: AddNourriture(int n)
{
	// Wait()
	Nourriture += n;
	// Notify()
}
int Fourmilliere :: GetPV()
{
	return PV;
}
int Fourmilliere :: AddPV(int pv)
{
	// Wait()
	PV += pv;
	// Notify()
}
void Fourmilliere :: AddOeuf()
{
	NB_Oeufs++;
}
void Fourmilliere :: OeufEclos()
{
	NB_Oeufs--;
}

void Fourmilliere :: OuvriereIsDead()
{
	NB_Ouvrieres--;
}
void Fourmilliere :: OuvriereIsBorn()
{
	NB_Ouvrieres++;
}
void Fourmilliere :: BatisseuseIsDead()
{
	NB_Batisseuses--;
}
void Fourmilliere :: BatisseuseIsBorn()
{
	NB_Batisseuses++;
}
void Fourmilliere :: CouveuseIsDead()
{
	NB_Couveuses--;
}
void Fourmilliere :: CouveuseIsBorn()
{
	NB_Couveuses++;
}
void Fourmilliere :: ReineIsDead()
{
	NB_Reines--;
}
void Fourmilliere :: ReineIsBorn()
{
	NB_Reines++;
}
int Fourmilliere :: GetNbJoursFamine()
{
	return NB_Jours_Famine;
}
int Fourmilliere :: GetPopulationTotale()
{
	return NB_Couveuses + NB_Reines + NB_Batisseuses + NB_Ouvrieres;
}
